歡迎來到我們30天生成式AI和Spring AI學習之旅的第六天!今天,我們將把之前學到的知識應用到實際中,實現一個簡單的問答應用程式。這個應用程序將接受用戶的問題,並使用生成式AI模型生成對應的答案。我們還將測試這個應用程序,並探索AI回應的非確定性特徵。
首先,我們將創建一個簡單的Spring Boot應用程式,使用ChatClient
與AI模型進行交互。以下是實現步驟:
您可以使用Spring Initializr或任何您喜歡的方式創建一個新的Spring Boot項目,並添加以下依賴:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
在應用程式的application.properties
或環境變量中配置您的OpenAI API密鑰:
spring.ai.openai.api-key=您的API密鑰
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7
創建一個服務類,用於與ChatClient
交互:
@Service
public class QuestionAnswerService {
private final ChatClient chatClient;
public QuestionAnswerService(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
public String getAnswer(String question) {
return chatClient.prompt()
.user(question)
.call()
.content();
}
}
創建一個REST控制器,接受用戶的問題並返回答案:
@RestController
@RequestMapping("/qa")
public class QuestionAnswerController {
private final QuestionAnswerService questionAnswerService;
public QuestionAnswerController(QuestionAnswerService questionAnswerService) {
this.questionAnswerService = questionAnswerService;
}
@PostMapping("/ask")
public ResponseEntity<Map<String, String>> askQuestion(@RequestBody Map<String, String> payload) {
String question = payload.get("question");
String answer = questionAnswerService.getAnswer(question);
return ResponseEntity.ok(Map.of("answer", answer));
}
}
確保所有配置和編譯正確,然後啟動您的Spring Boot應用程式。
現在,我們可以測試這個簡單的問答應用程式。
使用curl
或其他HTTP客戶端發送POST請求:
curl -X POST -H "Content-Type: application/json" -d '{"question": "世界上最高的山是什麼?"}' http://localhost:8080/qa/ask
預期響應:
{
"answer": "世界上最高的山是珠穆朗瑪峰(Mount Everest),其海拔高度約為8,848米。"
}
嘗試不同的問題,看看AI模型的回答如何:
在多次測試中,您可能會發現即使輸入相同的問題,AI模型的回答也可能略有不同。這是生成式AI的非確定性特徵。
您可以通過調整temperature
參數來控制輸出的隨機性。在application.properties
中:
spring.ai.openai.chat.options.temperature=0.3
較低的 temperature 會使模型的回答更一致。
重新測試應用程式,觀察在不同 temperature 下,模型的回答是否更加一致或多樣。
今天,我們實踐了以下內容:
ChatClient
與AI模型交互。